<?php
namespace SimplePhp\System;

/**
 *
 */
class File {
	protected $autoloadFileMap;

	public function __construct($root = null) {
		if (isset($root)) {
			$this->RecursiveFile($root);
		}

	}
	public function __get($name) {
		if ($name = "autoloadFileMap") {
			return $this->autoloadFileMap;
		}
	}
	/**
	 * 递归获取文件夹中的文件集合
	 * 遇到同名的文件就吧他包含到对应文件的key成为一个集合
	 * @param [type] $dir [description]
	 */
	public function RecursiveFile($dir) {
		if (!is_dir($dir)) {
			return false;
		}
		// 读取缓存  不需要遍历整个文件夹了
		if (!defined("debug") || !debug) {
			require_once CORE_PATH . "/Kernal/Cache/FileCache/LocalFileCache.class.php";
			//调试时不进行缓存读取
			$read = cache\LocalFileCache::read(__METHOD__ . $dir);
			if ($read != false) {
				$this->autoloadFileMap = $read;
				return $read;
			}
		}

		//创建文件夹iterator
		$iterator = new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::KEY_AS_FILENAME);
		//通过文件夹的iterator来获取遍历这个iterator的递归遍历的集合
		$iterator_iterator = new \RecursiveIteratorIterator($iterator);
		foreach ($iterator_iterator as $key => $value) {
			if (strstr($value, "/.") || $key == '..' || $key == ".") {
				continue;
			}
			$fileAbsolutePath = $value->getPath() . "/" . $value->getFilename();
			$this->autoloadFileMap = empty($this->autoloadFileMap) ? [] : $this->autoloadFileMap;
			$keys = array_keys($this->autoloadFileMap);
			if (array_search($key, $keys)) {
				$value = $this->autoloadFileMap[$key];
				if (is_array($value)) {
					$value[] = $fileAbsolutePath;
					$this->autoloadFileMap[$key] = $value;
				} else {
					$value = [$value, $fileAbsolutePath];
					$this->autoloadFileMap[$key] = $value;
				}
			} else {
				$this->autoloadFileMap[$key] = $fileAbsolutePath;
			}
		}
		if (!defined("debug") || !debug) {
			cache\LocalFileCache::save(__METHOD__ . $dir, $this->autoloadFileMap);
		}
		return $this->autoloadFileMap;
	}

	public function autoRequire($filename, $path) {
		if ($filename == "Config.php") {
			require $path;
		}
	}
}